package main

import (
	"fmt"
	"github.com/jasonlvhit/gocron"
	"github.com/robfig/cron/v3"
	"log"
	"time"
)

func main() {
	//testGoCron()
	testCron()
}

func testGoCron() {
	s := gocron.NewScheduler()
	s.Every(1).Seconds().Do(TaskOne)
	s.Every(4).Seconds().Do(TaskFour)

	//返回一个管道
	sc := s.Start() // keep the channel
	go test(s, sc)  // wait
	<-sc            // it will happens if the channel is closed
}

// * * * * *
// - - - - -
// | | | | |
// | | | | ----- 星期 - 0-6(0表示星期天)
// | | | ------- 月 - 1-12
// | | --------- 日 - 1-31
// | ----------- 小时 - 0-23
// ------------- 分钟 - 0-59
func testCron() {
	// 使用 cron 表达式设置任务
	c := cron.New()
	// 定义一个每5秒执行一次的任务函数
	myTask := func() {
		log.Println("每5秒执行一次任务")
		// 在这里添加你的任务逻辑
	}

	_, err := c.AddFunc("*/5 * * * *", myTask)
	if err != nil {
		fmt.Println("add func error:", err)
	}
	c.Start()
	// 保持程序运行，以便Cron任务能够按时执行
	select {}

}

// TaskOne
//
//	@Description: 每1s执行
func TaskOne() {
	fmt.Println("I am running task.1s", time.Now())
}

// TaskFour
//
//	@Description: 每4秒执行
func TaskFour() {
	fmt.Println("I am running superWang.4s", time.Now())
}

// test
//
//	@Description: 关闭
//	@param s
//	@param sc
func test(s *gocron.Scheduler, sc chan bool) {
	time.Sleep(10 * time.Second)
	s.Remove(TaskOne) //remove task
	time.Sleep(10 * time.Second)
	s.Clear()
	fmt.Println("All task removed")
	close(sc) // close the channel
}
